console.log(global.Buffer);

// 处理二进制数据的， 前端没有所谓的二进制格式的数据，只有字符串
// node就自己发明了一个buffer（用于存储二进制格式的类型）
// 二进制比较长 buffer的展现形式是16进制的
// blob 前端的blob对象不能修改。

// 进制之间是有转化 2 ,  8 ， 16 （本身是不会变的）

// 二进制，一个字节是由8个位bit组成 1,0

let sum = 0;
for (let i = 0; i < 8; i++) {
  sum += Math.pow(2, i);
}
console.log(sum);
console.log(2 ** 8 - 1);
// 一个字节最大就是255   255 10进制 11111111 2进制  进制 16 ff

console.log(16 * 15);

// 二进制转化成10进制 采用parseInt
console.log(parseInt("1010", 2));

// 将任意进制转化成任意进制
console.log((0b1010).toString(10)); // 0o开头的是8进制 0b开头是二进制 0x开头的是16进制
console.log(0o10);

// 0.1 + 0.2 != 0.3 (进行转化 存储都是以二进制来进行存储的)
// 想将小数转换成2进制

// 2 -》 10  乘权求合
// 10 -> 其他进制 反向取余
// 小数 -》 乘二取整法

// 0.1 * 2 = 0.2  ->  0
// 0.2 * 2 = 0.4  ->  0
// 0.4 * 2 = 0.8  ->  0
// 0.8 * 2 = 0.6  -> 1
// 0.6 * 2 = 0.2 -> 1

console.log((0.1).toString(2)); // 会比之前的值高一些
console.log((0.2).toString(2)); // 会比之前的值高一些

// js 计算的时候 都是近似值

// base64编码， base32编码
// 加密(将结果进行加密后按照特定秘钥可以解密) !== 编码(按照规则来算，有编码规范大家都可以按照规范来做) = 摘要（不可逆）

// 英文 26 个字母  大写26个  数字 10个 +/  64个
// 网上传输数据 传递中文会出现乱码问题，base64

// 汉字？ 位 字节呢?
// ascii
console.log(1 * 2 ** 7 - 1); // 127

// gb2312只支持简体中文，2个字节来表示
console.log(128 * 255); // 32640
// gbk 尽可能去增加编码 两个字节来表示一个汉字
// gb18030

// 别的国家编码？ Unicode 整个将字符 重排， 没有被推广
// utf8 编码成了 可变字节长度   汉字就是1个汉字三个字节  字符串 1个字节

// gb一个汉字2个字节  utf 一个汉字三个字节  （本质上就是按照规则进行了编码了而已）
// node中默认不支持gb字体 一个汉字就是三个字节

console.log(Buffer.from("帅")); //  0xe5 0xb8 0x85

// 变成二进制 在拆分成 一个个的  字节不大于64的 去取对应的编码

console.log((0xe5).toString(2));
console.log((0xb8).toString(2));
console.log((0x85).toString(2));
// 255       255      255
// 11100101   10111000  10000101

// 00111001  00011011  00100010  00000101
console.log((0b00111001).toString());
console.log((0b00011011).toString());
console.log((0b00100010).toString());
console.log((0b00000101).toString());
// console.log((0b00011111).toString()); // 0-63  base32

// 57 27 34 5
let str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
str += str.toLowerCase();
str += "0123456789";
str += "+/";

console.log(str[57] + str[27] + str[34] + str[5]); // 5biF

// 一个汉字是3个字节 转换成base64之后  会比之前大1/3. 如果是比较大的内容 不适合base64编码
// file-loader
